function firstMissingPositive(nums: number[]): number {
    const n = nums.length;
    
    // 原地哈希：将数字 i 放在索引 i-1 的位置
    for (let i = 0; i < n; i++) {
        // 当 nums[i] 在 [1, n] 范围内，且当前位置的值不等于它应该在的位置的值时
        // 进行交换，直到 nums[i] 不在有效范围内或已经在正确位置
        while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] !== nums[i]) {
            // 交换 nums[i] 和 nums[nums[i] - 1]
            const temp = nums[nums[i] - 1];
            nums[nums[i] - 1] = nums[i];
            nums[i] = temp;
        }
    }
    
    // 找到第一个位置不匹配的数字
    for (let i = 0; i < n; i++) {
        if (nums[i] !== i + 1) {
            return i + 1;
        }
    }
    
    // 如果都匹配，说明缺失的是 n + 1
    return n + 1;
};